//By Francois Budin
#ifndef Vector_h
#define Vector_h

#include <math.h>
#include "TabND.h"


namespace FPTK{
template<class T>
class Vector:public TabND<T>
{
public:
    Vector(long N);
    ~Vector();
    friend std::ostream& operator<<(std::ostream& os,const Vector<T> &v2)
    {    
        for(int i=0;i<v2.GetSizeDim(0);i++)
        {
            os<<v2.GetElement(i)<<std::endl;
        }
        return os;
    }
    Vector<T> operator-();
    Vector<T> operator+(const Vector<T> &v2) const;
    Vector<T> operator-(const Vector<T> &v2) const;
    template<class C> operator Vector<C> const() const;
    template<class C> Vector<T> operator*(C f) const;
    //Vector<T> operator*(float f) const;
    //Vector<T> operator*(double d) const;
    //Vector<T> operator*(short s) const;
    //Vector<T> operator*(long i) const;
    //Vector<T> operator*(int i) const;
    double GetNorm(long p) const;
    double GetNorm() const;
    double GetNormInfini() const;
    double DotProduct(const Vector<T> &v2) const;
    Vector<T> CrossProduct(const Vector<T> &v2) const;

private:

};

}//end namespace FPTK


#include "Vector.cxx"

#endif



